/*
 *  cl_fit_data_funcs.cpp
 *  BinaryModeling
 *
 *	Arquivo com a definicao das funcoes de leitura dos arquivos de dados
 *
 *	Definicao das funcoes da classe DataReader. Essa classe le e armazena em uma classe
 *	os dados de entrada.
 *
 *  Created by Tiago Ribeiro on 25/08/10.
 *  Copyright 2010 __MyCompanyName__. All rights reserved.
 *
 */

#include "cl_fit_mc_v0_1.h"

DataReader::DataReader(char* argv){
	
	if (!argv) help_page(0);
	
	DataFileReader read(argv);
	
	_ilist = argv;
	
	_nData = 0;
	//Conta quantos arquivos estao na lista
	while(!++read){
		++_nData;
	}
	
	// reserva espaco para guardas quantos dados cada curva possui
	_npData = new int [_nData];
	_input_ = new Data* [_nData];
	_filename = new string [_nData];
	
	// rebobina para ler denovo
	read.rewind();
	
	// Conta quantos dados possui cada arquivo
	
	int i = 0;
	while (!++read) {
		
		_filename[i] = read.readColumn<string>(1);
		DataFileReader data(read.readColumn<string>(1));
		_npData[i] = 0;
		
		
		// Conto quantos pontos possui arquivo
		while (!++data) {
			++_npData[i];	
		}

		
		//rebobino
		data.rewind();
		
		//Armazeno espaco
		_input_[i] = new Data [_npData[i]];
		
		//Leio
		int j = 0;
		while (!++data) {
			_input_[i][j].fase = data.readColumn<double>(1);
			_input_[i][j].flux = data.readColumn<double>(2);
			_input_[i][j].ferr = data.readColumn<double>(3);
			++j;
		}
		++i;
		
	}
	
	
}

void DataReader::info(void)
{
	
	cout << "# - List " << _ilist << " contains " << _nData << " files readied:" << endl;
	for (int i = 0 ; i < _nData; ++i) {
		cout << "## - File " << _filename[i]
			 << " containg " << _npData[i] << " points...\n";		
	}
	
}
